package com.yun.algorithmproblem.leetcode;

import java.util.ArrayList;
import java.util.List;

/**
 * 2860. 让所有学生保持开心的分组方法数
 * <p>
 * 给你一个下标从 0 开始、长度为 n 的整数数组 nums ，其中 n 是班级中学生的总数。班主任希望能够在让所有学生保持开心的情况下选出一组学生：
 * <p>
 * 如果能够满足下述两个条件之一，则认为第 i 位学生将会保持开心：
 * <p>
 * 这位学生被选中，并且被选中的学生人数 严格大于 nums[i] 。
 * 这位学生没有被选中，并且被选中的学生人数 严格小于 nums[i] 。
 * 返回能够满足让所有学生保持开心的分组方法的数目。
 */
public class Leetcode2860 {

    public static void main(String[] args) {
        int[] num = {2,2,7,1,2,2,4,7};
        List<Integer> nums = new ArrayList<>();
        for (Integer n : num) {
            nums.add(n);
        }
        Leetcode2860 obj = new Leetcode2860();
        int i = obj.countWays(nums);
        System.out.println(i);
    }

    public int countWays(List<Integer> nums) {
        int[] count = new int[nums.size()];
        for (Integer num : nums) {
            count[num]++;
        }
        int res = 0;
        if (count[0] == 0) {
            res++;
        }
        int studentNums = 0;
        boolean check = false;
        for (int i = 0; i < nums.size(); i++) {
            studentNums += count[i];
            if (!check && studentNums > i) {
                check = true;
            } else if (check && studentNums <= i) {
                res++;
                check = false;
            }
        }
        if(check){
            res++;
        }
        return res;
    }
}
